#ifndef BIT_H
#define BIT_H

#include "bitset.h"

class Bit {
  public:
    Bit();

    Bit( BitSet * set, int index );

  private:
    BitSet * set;
    int index;
};

template <int N>
Bit operator + (const Bit & b1, const Bit & b2);

template <int N>
Bit operator - (const Bit & b1, const Bit & b2);

template <int N>
Bit operator * (const Bit & b1, const Bit & b2);

template <int N>
Bit operator / (const Bit & b1, const Bit & b2);

template <int N>
Bit operator << (const Bit & b1, int n);

template <int N>
Bit operator >> (const Bit & b1, int n);

template <int N>
Bit operator ~ (const Bit & b2);

template <int N>
Bit operator & (const Bit & b1, const Bit & b2);

template <int N>
Bit operator | (const Bit & b1, const Bit & b2);

template <int N>
Bit operator ^ (const Bit & b1, const Bit & b2);

#endif /* BIT_H */
